跳到主要内容

JMeter 压力测试

什么是 JMeter

JMeter 是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能。

JMeter 主要用于测试 Web 应用程序或 FTP应用程序,但目前,它适用于功能测试,JDBC数据库连接,Web服务,通用TCP连接和OS本机进程。它可以执行各种测试活动,如性能,负载,压力,回归和功能测试,用于 Web服务器获得准确的性能指标。

以下是 JMeter支持的协议列表:

  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP .NET,...)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented Middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects

JMeter 与 Ab 区别

之前学习过一个 Apache 出的压力测试工具 Apache Bench,它们两者有什么区别呢?

ab 可以提供需要的基本性能指标;但是缺点就是没有图形化结果,不能监控。

JMeter 可以告诉你每个请求实际上耗费多长时间。AB 只是简单的用数学方式统计平均值。所以从准确性来说,JMeter比 ab更准确,更多如数据处理。

但是 ab的速度更快,更轻巧。如果性能测试的目的在于更真实的表现被测应用,那么 JMeter 更佳,但如仅仅是用最少的机器资源产生最多的访问请求,那 ab 适合

安装配置

先到 官网下载 解压安装

官网就有切换镜像的功能,最好换成 hk 的镜像服务器,不然下载很慢(当然,换了也巨慢)

下载好了点这个 jmeter.bat 启动窗口

添加虚拟用户组

如下图所示,右击 “测试计划” > 添加 > Threads(Users)> 线程组。

“线程组”的意思:JMeter是由Java实现的,并且使用一个Java线程来模拟一个用户,因此线程组(Thread Group)就是指一组用户的意思,换句话说一个线程组就是一组虚拟用户(virtual users),这些虚拟用户用来模拟访问被测系统。

线程数: 这里就是指虚拟用户数,默认的输入是“1”,则表明模拟一个虚拟用户访问被测系统,如果想模拟100个用户,则此处输入100。

Ramp-Up Period (in seconds): 虚拟用户增长时长。比如测试的是一个考勤系统,那么实际用户登录使用考勤系统的时候并不是大家喊1、2、3 - 走起,然后一起登录。实际使用场景可能是9点钟上班,那么从8:30开始,考勤系统会陆陆续续有人开始登录,直到9:10左右,那么如果完全按照用户的使用场景,设计该测试的时候此处应输入40(分钟)* 60(秒)= 2400。但是实际测试一般不会设置如此长的 Ramp-Up 时间,原因嘛,难道你做一次测试要先等上40分钟做登录操作?一般情况下,可以估计出登录频率最高的时间长度,比如此处可能从8:55到9:00登录的人最多,那这里设置成300秒,如果“线程数”输入为100,则意味着在5分钟内100用户登录完毕。

循环次数: 该处设置一个虚拟用户做多少次的测试。默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果选中“永远”,则意味着测试运行起来之后就根本停不下来了,除非你把它强制咔嚓。

如下这样就是两万并发

添加被测页面

接下来的一步就是要加入实际被测页面,右击 “线程组” > “添加” > “取样器” > “HTTP请求”。

配置好点击启动就可以开始测试了

注意,这个日志查看最好勾上

就能在控制台看到日志了

如果想要直观的显示,点这个查看结果树(也可以使用其它的看)

如下使用的图形结果

References